Do not leak LayoutChild instances
authorEmmanuele Bassi <ebassi@gnome.org>
Mon, 17 Jun 2019 08:26:39 +0000 (09:26 +0100)
committerEmmanuele Bassi <ebassi@gnome.org>
Sun, 30 Jun 2019 22:42:44 +0000 (23:42 +0100)
Since the LayoutManager owns the LayoutChild it creates, it's also
responsible for mopping them up.

gtk/gtklayoutmanager.c

index 1aa7724d497c701f925e16b28bc44e169a7b268a..547c76bbdf99306540cf01366a3564aff4474d66 100644 (file)
@@ -199,9 +199,24 @@ gtk_layout_manager_real_create_layout_child (GtkLayoutManager *manager,
                        NULL);
 }
 
+static void
+gtk_layout_manager_finalize (GObject *gobject)
+{
+  GtkLayoutManager *self = GTK_LAYOUT_MANAGER (gobject);
+  GtkLayoutManagerPrivate *priv = gtk_layout_manager_get_instance_private (self);
+
+  g_clear_pointer (&priv->layout_children, g_hash_table_unref);
+
+  G_OBJECT_CLASS (gtk_layout_manager_parent_class)->finalize (gobject);
+}
+
 static void
 gtk_layout_manager_class_init (GtkLayoutManagerClass *klass)
 {
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+  gobject_class->finalize = gtk_layout_manager_finalize;
+
   klass->get_request_mode = gtk_layout_manager_real_get_request_mode;
   klass->measure = gtk_layout_manager_real_measure;
   klass->allocate = gtk_layout_manager_real_allocate;